/**
 * 屏蔽统计表-月报
 * @author rxliuli
 */
class RShield {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Number} id 主键
     * @param {Number} totalCount 屏蔽总数
     * @param {Number} belongYear 所属年
     * @param {Number} ipBlackCount IP 黑名单数量
     * @param {Number} domainBlackCount 域名黑名单数量
     * @param {Number} ipWhiteCount IP 白名单数量
     * @param {Number} domainWhiteCount 域名白名单数量
     * @param {Number} urlWhiteCount url 白名单数量
     * @param {Number} ipShieldCount IP 屏蔽数量
     * @param {Number} domainShieldCount 域名屏蔽数量
     * @param {Number} urlShieldCount url 屏蔽数量
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    id,
                    belongYear,
                    totalCount,
                    ipBlackCount,
                    domainBlackCount,
                    ipWhiteCount,
                    domainWhiteCount,
                    urlWhiteCount,
                    ipShieldCount,
                    domainShieldCount,
                    urlShieldCount,
                    ...args
                } = {}) {
        this.id = id
        this.totalCount = totalCount
        this.belongYear = belongYear
        this.ipBlackCount = ipBlackCount
        this.domainBlackCount = domainBlackCount
        this.ipWhiteCount = ipWhiteCount
        this.domainWhiteCount = domainWhiteCount
        this.urlWhiteCount = urlWhiteCount
        this.ipShieldCount = ipShieldCount
        this.domainShieldCount = domainShieldCount
        this.urlShieldCount = urlShieldCount
        Object.assign(this, args)
    }
}

/**
 * 屏蔽统计表-月报
 * @author rxliuli
 */
class RShieldMon extends RShield {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Number} month 统计月份，例如：1
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    month,
                    ...args
                } = {}) {
        super(args)
        this.month = month
        Object.assign(this, args)
    }
}

/**
 * 屏蔽统计表-周报
 * @author rxliuli
 */
class RShieldWeek extends RShield {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Number} week 统计周，一年52周，从第一周开始，例如：1
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    week,
                    ...args
                } = {}) {
        super(args)
        this.week = week
        Object.assign(this, args)
    }
}

/**
 * 屏蔽统计表-日报
 * @author rxliuli
 */
class RShieldDay extends RShield {
    /**
     * 构造函数
     * @param {Object} [option] 可选参数
     * @param {Number} day 统计日，例如：1
     * @param {String} belongMonth 所属年，例如：2019-01
     * @param {...Object} [option.args] 其他参数
     */
    constructor({
                    day,
                    belongMonth,
                    ...args
                } = {}) {
        super(args)
        this.day = day
        this.belongMonth = belongMonth
        Object.assign(this, args)
    }
}